﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace RPG_The_Game.Objetos
{
    class Rato:Objetos.Sprite
    {
        //protected GameWindow window;
        //protected Texture2D imagem;
        //protected Vector2 posicao;
        //protected Vector2 velocidade;
        //protected bool visivel;

        SoundEffect efeitoSonoro;
        /// <summary>
        /// Para aonde o rato vai se mover
        /// </summary>
        public Vector2 posMouse;
        /// <summary>
        /// Calcular a diferença entre a posição rato e a do mouse
        /// </summary>
        public Vector2 diferenca;
        public int vida;
        public int pontos;
        public int jogador;
        public TimeSpan tempo;
        public Vector2 PosMouse
        {
            get
            {
                return posMouse;
            }

            set
            {
                posMouse = value;
            }
        }
        public Vector2 Posicao
        {
            get
            {
                return posicao;
            }

            set
            {
                posicao = value;
            }
        }

        public animacao andando;
        animacao parado;
        animacao atacando;
        animacao pulando;
        public animacao animacao_atual;

        public Rato(Texture2D textura, Vector2 posicao, Vector2 velocidade, GameWindow window, int inhame, TimeSpan lol)
            :base(textura)
        {
            tempo = lol;
            vida = inhame;
            pontos = inhame;
            this.textura = textura;
            this.posicao = posicao;
            this.velocidade = velocidade;
            this.window = window;
        }

        public Rato(Texture2D textura, GameWindow window, SoundEffect efeitoSonoro)
            : base(textura)
        {
            this.textura = textura;
            this.window = window;
            this.efeitoSonoro = efeitoSonoro;

            andando = new animacao();
            andando.qtd_quadros = 3;
            andando.quadros_seg = 3;
            andando.Y = 0;
            andando.quadro_X = textura.Width / andando.qtd_quadros;
            andando.quadro_Y = textura.Height / andando.qtd_quadros;
            andando.nome = "andando";

            destino = new Rectangle(0, 0, andando.quadro_X, andando.quadro_Y);

        }

        public override void Update(GameTime gameTime) { }
             
        public void Update(GameTime gameTime, KeyboardState teclado, KeyboardState teclado_anterior)
        {
            //lol += gameTime.ElapsedGameTime;
            if (jogador == 1)
            {
                if (teclado.IsKeyDown(Keys.Right))
                {
                    posicao.X += velocidade.X;
                    pontos += 1;
                    vida -= 1;
                    andando.Y = 66;
                }

                if (teclado.IsKeyDown(Keys.Left))
                {
                    posicao.X -= velocidade.X;
                    andando.Y = 33;
                    pontos += 1;
                    vida -= 1;
                }

                if (teclado.IsKeyDown(Keys.Up))
                {
                    posicao.Y -= velocidade.Y;
                    andando.Y = 99;
                    pontos += 1;
                    vida -= 1;
                }

                if (teclado.IsKeyDown(Keys.Down))
                {
                    posicao.Y += velocidade.Y;
                    andando.Y = 0;
                    pontos += 1;
                    vida -= 1;
                }

                if (teclado.IsKeyDown(Keys.Space) && !teclado_anterior.IsKeyDown(Keys.Space))
                {
                    efeitoSonoro.Play();
                }

                if (posicao.X >= window.ClientBounds.Width - destino.Width)
                {
                    posicao.X = window.ClientBounds.Width - destino.Width;
                }

                if (posicao.Y >= window.ClientBounds.Height - destino.Height)
                {
                    posicao.Y = window.ClientBounds.Height - destino.Height;
                }

                if (posicao.X <= 0)
                {
                    posicao.X = 0;
                }

                if (posicao.Y <= 0)
                {
                    posicao.Y = 0;
                }

                /*if (joystick_atual.ThumbSticks.Right.X == -1)
                {
                    this.posicao.X -= this.velocidade.X * (float)gameTime.ElapsedGameTime.Milliseconds;
                    this.andando.Y = 33;
                }

                if (joystick_atual.ThumbSticks.Right.X == 1)
                {
                    this.posicao.X += this.velocidade.X * (float)gameTime.ElapsedGameTime.Milliseconds;

                    this.andando.Y = 66;
                }

                if (joystick_atual.ThumbSticks.Right.Y == -1)
                {
                    this.posicao.Y += this.velocidade.Y * (float)gameTime.ElapsedGameTime.Milliseconds;
                    this.andando.Y = 0;
                }

                if (joystick_atual.ThumbSticks.Right.Y == 1)
                {
                    this.posicao.Y -= this.velocidade.Y * (float)gameTime.ElapsedGameTime.Milliseconds;
                    this.andando.Y = 99;
                }

                if (joystick_atual.ThumbSticks.Left.X == -1)
                {
                    this.posicao.X -= this.velocidade.X * (float)gameTime.ElapsedGameTime.Milliseconds;
                    this.andando.Y = 33;
                }

                if (joystick_atual.ThumbSticks.Left.X == 1)
                {
                    this.posicao.X += this.velocidade.X * (float)gameTime.ElapsedGameTime.Milliseconds;

                    this.andando.Y = 66;
                }

                if (joystick_atual.ThumbSticks.Left.Y == -1)
                {
                    this.posicao.Y += this.velocidade.Y * (float)gameTime.ElapsedGameTime.Milliseconds;
                    this.andando.Y = 0;
                }

                if (joystick_atual.ThumbSticks.Left.Y == 1)
                {
                    this.posicao.Y -= this.velocidade.Y * (float)gameTime.ElapsedGameTime.Milliseconds;
                    this.andando.Y = 99;
                }*/
            }
        }
        public void Draw(SpriteBatch spriteBatch, GameTime gameTime)
        {
             base.Draw(gameTime, spriteBatch, animacao_atual);
             
        }

        public bool Bateu(Rato rato)
        {
            if (this.colisao.Intersects(rato.Colisao))
            {
                return true;
            }
            else return false;
        }

    }
}
